package com.itheima.advance.reflect.demo03;

import java.lang.reflect.Field;

/**
 * 通过反射技术去获取某一个类对应的成员变量(Field)
 */
public class ReflectDemo01 {

    public static void main(String[] args) throws Exception {

        // 1. 获取Student类对应的字节码文件对象: Class对象
        Class studentClazz = Class.forName("com.itheima.advance.reflect.demo03.Student");

        // 2. 调用方法获取这个类中的成员变量
        /**
         * Field[] getFields()：				返回所有公共成员变量对象的数组
         * Field[] getDeclaredFields()：		返回所有成员变量对象的数组
         * Field getField(String name)：		返回单个公共成员变量对象
         * Field getDeclaredField(String name)：返回单个成员变量对象
         */

        // Field[] getFields()：				返回所有公共成员变量对象的数组
        Field[] fields = studentClazz.getFields();
        for(Field field : fields) {
            System.out.println(field);
        }

        System.out.println("------------------------------------------------");

        // Field[] getDeclaredFields()：		返回所有成员变量对象的数组
        Field[] declaredFields = studentClazz.getDeclaredFields();
        for(Field field : declaredFields) {
            System.out.println(field);
        }

        System.out.println("------------------------------------------------");

        // Field getField(String name)：		返回单个公共成员变量对象 , 参数表示的就是指定成员变量的名称
        Field field = studentClazz.getField("name");
        System.out.println(field);

        System.out.println("------------------------------------------------");

        // Field getDeclaredField(String name)：返回单个成员变量对象
        Field declaredField = studentClazz.getDeclaredField("age");
        System.out.println(declaredField);

    }


}
